package com.qf.consumer;


import com.qf.dao.impl.Producer;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


public class Demo01 {
    public static void main(String[] args) {

        final Producer producer = new Producer();
        producer.buyProduct("厂家");
        //基于子类的代理 cglib
        //第一个参数：目标类字节码对象
        //第二个参数：增强代码
        Producer o = (Producer) Enhancer.create(producer.getClass(), new MethodInterceptor() {
            // obejct 代理对象的引用   method：方法对象  objects：执行对应方法的参数
            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {

                if ("buyProduct".equals(method.getName())){
                    System.out.println("执行业务增强逻辑");
                    //执行目标方法
                    method.invoke(producer,objects);
                }
                return null;
            }
        });
        o.buyProduct("代理");

    }
}
